home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -screenplay- / hd_installers / -whdload- / whdload_dev / src / slave-examples / turrican2.asm < prev    next >
Assembly Source File  |  1998-06-22  |  7KB  |  304 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    turrican2.asm
  3. ;  :Contents.    Slave for "Turrican II"
  4. ;  :Author.    BJ
  5. ;  :History.    09.07.96 initial
  6. ;        14.12.96 rework for public installion release
  7. ;        23.12.96 installation improved / using new whdload functions
  8. ;        31.08.97 update for key managment and sources
  9. ;  :Requires.    -
  10. ;  :Copyright.    Public Domain
  11. ;  :Language.    68000 Assembler
  12. ;  :Translator.    Barfly V1.131
  13. ;  :To Do.
  14. ;---------------------------------------------------------------------------*
  15.  
  16. install    ;create install slave
  17.  
  18.     INCDIR    Includes:
  19.     INCLUDE    whdload.i
  20.  
  21.  IFND install
  22.     OUTPUT    wart:turrican2/turrican2.slave
  23.  ELSE
  24.     OUTPUT    wart:turrican2/install.slave
  25.  ENDC
  26.     BOPT    O+ OG+            ;enable optimizing
  27.     BOPT    w4-            ;disable 64k warnings
  28.     SUPER
  29.  
  30. ; DiskFormat:
  31. ; Track 0-1 std (512 byte/sec,11 sec/track = 5632 byte/track)
  32. ; Track 2-159    (6800 byte/track)
  33.  
  34. ;======================================================================
  35.  
  36. .base        SLAVE_HEADER        ;ws_Security + ws_ID
  37.         dc.w    4        ;ws_Version
  38.         dc.w    WHDLF_Disk|WHDLF_NoError    ;ws_flags
  39.         dc.l    $80000        ;ws_BaseMemSize
  40.         dc.l    $20698        ;ws_ExecInstall
  41.         dc.w    _Start-.base    ;ws_GameLoader
  42.         dc.w    0        ;ws_CurrentDir
  43.         dc.w    0        ;ws_DontCache
  44. _keydebug    dc.b    $58        ;ws_keydebug = F9
  45.     IFD install
  46. _keyexit    dc.b    $45        ;ws_keyexit = ESC
  47.     ELSE
  48. _keyexit    dc.b    $59        ;ws_keyexit = F10
  49.     ENDC
  50.  
  51. ;======================================================================
  52.  
  53.     DOSCMD    "WDate >T:date"
  54.         dc.b    "$VER:"
  55.     INCBIN    "T:date"
  56.         dc.b    0
  57.  
  58. ;======================================================================
  59. _Start    ;    A0 = resident loader
  60. ;======================================================================
  61.  
  62.         lea    (_resload,pc),a1
  63.         move.l    a0,(a1)
  64.  
  65. ;======================================================================
  66.  
  67.     IFD install        ;create installation slave
  68.  
  69. ;======================================================================
  70.  
  71.     ;install keyboard quitter
  72.         bsr    _SetupKeyboard
  73.  
  74.     ;magic screen
  75.         lea    _disk1,a0
  76.         lea    $61000,a1
  77.         bsr    _Picture
  78.             waitbutton
  79.         lea    _wait,a0
  80.         lea    $61000,a1
  81.         bsr    _Picture
  82.  
  83.  
  84. _buffer    = $400    ;space for disk directory information
  85. dirsize = $1e0    ;size of directory information
  86.  
  87.     ;eigenlichen Loader laden / speichern
  88.         MOVE.L    #$00060000,a0    ;adr
  89.         MOVE.L    #$00000800,d1    ;size
  90.         MOVE.L    #$00000400,d0    ;offset
  91.         sub.l    a1,a1        ;taglist
  92.         movem.l    d1/a0,-(a7)
  93.         move.l    (_resload),a2
  94.         jsr    (resload_DiskLoadDev,a2)
  95.         movem.l    (a7)+,d0/a1
  96.         lea    (_60000),a0
  97.         jsr    (resload_SaveFile,a2)
  98.  
  99.     ;create disk image from orginal disk
  100.     ;Inhaltsverzeichnis der Diskette lesen
  101.         move.l    #dirsize,d0    ;size
  102.         move.l    #2,d1        ;starttrack
  103.         move.l    #0,d2        ;byteoffset
  104.         lea    _buffer,a0
  105.         lea    $dff000,a6
  106.         jsr    $60394
  107.  
  108.         move.l    #dirsize,d0    ;size of directory
  109.         lea    _buffer+8,a0
  110.         moveq    #dirsize/16-1,d1
  111. .lp        add.l    (a0),d0        ;calculate image size
  112.         add.w    #16,a0
  113.         dbf    d1,.lp
  114.         
  115.     ;Image lesen
  116.         move.l    #2,d1        ;d1 = starttrack
  117.         move.l    #0,d2        ;d2 = byteoffset
  118.         lea    $1000,a0    ;a0 = address
  119.         move.l    d0,d5        ;d5 = image size
  120.         lea    $dff000,a6    ;a6 = custom
  121.         move.l    #53,d3        ;d3 = part tracks
  122.         move.l    d3,d4
  123.         mulu    #6800,d4    ;d4 = part size
  124.  
  125. .2        move.l    d4,d0
  126.         cmp.l    d4,d5
  127.         bhi    .1
  128.         move.l    d5,d0
  129. .1        movem.l    d0-a6,-(a7)
  130.         jsr    $60394        ;loader is too stupid for large files !!!
  131.         movem.l    (a7),d0-a6
  132.         move.l    a0,a1        ;address
  133.         lea    (_imagename),a0    ;name
  134.         addq.b    #1,(1,a0)
  135.         move.l    (_resload),a2
  136.         jsr    (resload_SaveFile,a2)
  137.         movem.l    (a7)+,d0-a6
  138.         add.l    d3,d1        ;skip read tracks
  139.         sub.l    d0,d5        ;correct
  140.         bne    .2
  141.  
  142.     ;highscores laden
  143. _highs        move.l    #"MAIN",d0    ;name
  144.         move.l    #$c0,d1        ;address
  145.         moveq    #1,d2
  146.         jsr    $60164        ;load by name
  147.         jsr    $c0+$b20    ;load highs
  148.         bsr    _savehighs
  149.         bra    _exit
  150.  
  151. _imagename    dc.b    "d0",0,0
  152. _disk1        INCBIN    pics/pic_disk1.bin
  153. _wait        INCBIN    pics/pic_waitesc.bin
  154. _colors        INCLUDE    pics/pic_colors.i
  155.  
  156. ;======================================================================
  157.  
  158.     INCDIR    Sources:whdload
  159.     INCLUDE    keyboard.s
  160.     INCLUDE    picture.s
  161.  
  162. ;======================================================================
  163.  
  164.     ELSE            ;create game slave
  165.     
  166. ;======================================================================
  167.  
  168.         move.l    #CACRF_EnableI,d0
  169.         move.l    d0,d1
  170.         jsr    (resload_SetCACR,a0)
  171.         
  172.         lea    _60000,a0
  173.         lea    $60000,a1
  174.         move.l    a1,a2
  175.         move.l    (_resload),a3
  176.         jsr    (resload_LoadFileDecrunch,a3)
  177.         patch    $c0(a2),_1
  178.         patch    $394(a2),_loadbygeo
  179.         patchs    $5a(a2),_wait
  180.         moveq    #0,d0        ;expmem
  181.         jmp    (a2)
  182.  
  183. _wait        move.w    #300,d2
  184. .w        waitvb            ;wait for end of logo
  185.         dbf    d2,.w
  186.         move.w    #$7fff,$dff09a
  187.         addq.l    #2,(a7)
  188.         rts
  189.  
  190. _1        lea    $c0,a0
  191.         patch    $922(a0),_loadbygeo
  192.         patch    $b20(a0),_loadhighs
  193.         patch    $b9e(a0),_savehighs
  194.         jmp    (a0)
  195.         
  196.     ;d0 = size in bytes
  197.     ;d1 = start track
  198.     ;d2 = offset track in bytes
  199.     ;a0 = address
  200. _loadbygeo    bsr    _kinit
  201.  
  202.         move.l    d2,-(a7)
  203.         subq.w    #2,d1        ;image starts at track 2
  204.         mulu    #6800,d1
  205.         add.l    d2,d1        ;offset
  206.         exg.l    d0,d1
  207.         moveq    #1,d2        ;disk
  208.         move.l    a3,-(a7)
  209.         move.l    (_resload),a3
  210.         jsr    (resload_DiskLoad,a3)
  211.         move.l    (a7)+,a3
  212.         move.l    (a7)+,d2
  213.         moveq    #0,d0
  214.         rts
  215.  
  216. _kinit        movem.l    a0-a1,-(a7)
  217.         lea    (_keyboard,pc),a1
  218.         cmp.l    $68,a1
  219.         beq    .q
  220.         lea    (_realint68,pc),a0
  221.         move.l    $68,(a0)
  222.         move.l    a1,$68
  223. .q        movem.l    (a7)+,a0-a1
  224.         rts
  225.  
  226. _realint68    dc.l    0
  227.  
  228. _keyboard    move.l    d0,-(a7)
  229.         move.b    $bfec01,d0
  230.         ror.b    #1,d0
  231.         not.b    d0
  232.  
  233.         cmp.b    (_keydebug),d0
  234.         bne    .1
  235.         move.l    (a7)+,d0
  236.         move.w    (a7),(6,a7)        ;sr
  237.         move.l    (2,a7),(a7)        ;pc
  238.         clr.w    (4,a7)            ;ext.l sr
  239.         bra    _debug            ;coredump & quit
  240. .1
  241.         cmp.b    (_keyexit),d0
  242.         beq    _exit            ;exit
  243.  
  244.         move.l    (a7)+,d0
  245.         move.l    (_realint68),-(a7)    ;enter orginal rou.
  246.         rts
  247.  
  248. _loadhighs    movem.l    d0-d1/a0-a2,-(a7)
  249.         move.l    (_resload),a2
  250.         lea    _highsname,a0
  251.         jsr    (resload_GetFileSize,a2)
  252.         tst.l    d0
  253.         beq    .end
  254.         bsr    _crypt
  255.         lea    _highsname,a0
  256.         lea    $25e,a1
  257.         jsr    (resload_LoadFile,a2)
  258.         bsr    _crypt
  259. .end        movem.l    (a7)+,d0-d1/a0-a2
  260.         rts
  261.  
  262. ;======================================================================
  263.  
  264.     ENDC
  265.     
  266. ;======================================================================
  267.  
  268. _savehighs    movem.l    d0-d1/a0-a1,-(a7)
  269.         bsr    _crypt
  270.         move.l    #$61*4,d0
  271.         lea    _highsname,a0
  272.         lea    $25e,a1
  273.         move.l    (_resload),a2
  274.         jsr    (resload_SaveFile,a2)
  275.         bsr    _crypt
  276.         movem.l    (a7)+,d0-d1/a0-a1
  277.         rts
  278.  
  279. _crypt        lea    $25e,a0
  280.         move.w    #$61*4-1,d0
  281. .lp        eor.b    d0,(a0)+
  282.         dbf    d0,.lp
  283.         rts
  284.     
  285. ;--------------------------------
  286.  
  287. _60000        dc.b    "60000",0
  288. _highsname    dc.b    "highs",0
  289. _resload    dc.l    0        ;address of resident loader
  290.  
  291. ;--------------------------------
  292.  
  293. _exit        pea    TDREASON_OK.w
  294.         bra    _end
  295. _debug        pea    TDREASON_DEBUG.w
  296. _end        move.l    (_resload),-(a7)
  297.         addq.l    #resload_Abort,(a7)
  298.         rts
  299.  
  300. ;======================================================================
  301.  
  302.     END
  303.  
  304.